#ifndef VEHICULO_H_
#define VEHICULO_H_

#include <string>

class Vehiculo{
  protected:
	static int ctdadAutos ; 
	static int ctdadAmbulancias ; 
	static int ctdadPolicias ; 
	static int ctdadVehiculos ;
	std::string nombre ; 
	std::string destino ;
    int _prioridad;
    Vehiculo(){ _prioridad = 0 ; }
    
  public:
    ~Vehiculo(){}
    int getPrioridad() const { return _prioridad ; }
	std::string getNombre() const { return nombre ; } 
	std::string getDestino() const { return destino ; } 
	static int getCtdadVehiculos() { return ctdadVehiculos ; }
	static void disminuirCtdadVehiculos() { ctdadVehiculos-- ;  } 
};

class Auto : public Vehiculo{
  public:
    Auto(std::string destino) { 
		nombre = "Auto_"+std::to_string(ctdadAutos) ; 
		_prioridad = 1 ; 
		ctdadAutos++ ;
		ctdadVehiculos++ ;
		this->destino = destino ; 
	} 
};

class Policia : public Vehiculo{
  public:
    Policia(std::string destino){ 
		nombre = "Policia_"+std::to_string(ctdadPolicias) ; 
		_prioridad = 3; 
		ctdadPolicias++ ; 
		ctdadVehiculos++ ;
		this->destino = destino ; 
	}
};

class Ambulancia : public Vehiculo{
  public:
    Ambulancia(std::string destino){
		nombre = "Ambulancia_"+std::to_string(ctdadAmbulancias) ; 	
		_prioridad = 3; 
		ctdadAmbulancias++ ; 
		ctdadVehiculos++ ;
		this->destino = destino ; 
	} 
};

struct compVehiculo {
	bool operator() (Vehiculo * lhs, Vehiculo * rhs) const {
		return lhs->getPrioridad()<rhs->getPrioridad() ; 
	}
}; 

#endif

